package main

import (
	"code.byted.org/gopkg/gorm"
	"encoding/json"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"log"
	"time"
)

var db *gorm.DB

type TUser struct {
	// 主键
	Id   int `gorm:"primary_key"`
	Name string
	Age  int
	// 忽略字段
	CreateTime time.Time `sql:"-"`
	UpdateTime time.Time `sql:"-"`
	// 逻辑删除字段
	Deleted int `sql:"-"`
}

func init() {
	// 构建数据库连接对象
	var err error
	// 全局变量要注意的是此处不能覆盖全局变量
	db, err = gorm.Open("mysql", "root:zouyaowen@tcp(127.0.0.1:3306)/learning?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		log.Println("数据库连接异常", err)
		return
	}
	// 设置全局表名禁用复数
	db.SingularTable(true)
	// 设置闲置的连接数
	db.DB().SetMaxIdleConns(10)
	// 设置最大打开的连接数，默认值为0表示不限制
	db.DB().SetMaxOpenConns(100)
	// 显示执行SQL
	db.LogMode(true)

}

func (user *TUser) query() (u []TUser) {
	//查询所有记录
	db.Find(&u)

	//Find方法可以带 where 参数
	db.Find(&u, "id > ? and age > ?", 2, 12)

	//带where 子句的查询，注意where要在find前面
	db.Where("id > ?", 2).Find(&u)

	// where name in ("xiaoming","xiaohong")
	db.Where("name in (?)", []string{"xiaoming", "xiaohong"}).Find(&u)

	//获取第一条记录，按照主键顺序排序
	db.First(&u)

	//First方法可以带where 条件
	db.First(&u, "where sex = ?", 1)

	//获取最后一条记录，按照主键顺序排序
	//同样 last方法也可以带where条件
	db.Last(&u)
	return u
}

func (user *TUser) selectAllUsers() (u TUser) {
	//查询所有记录
	db.Find(&u)
	return u
}

func main() {
	user := TUser{Id: 16}
	first := db.First(&user)
	log.Println("first", first)
	_user, _ := json.Marshal(user)
	log.Printf("%v\n", string(_user))
	//user := TUser{Id: 16}
	//first := db.First(&user)
	//log.Println("first", first)
	//log.Println("user", user)
	log.Println("user--------------")

}
